package gwtool.container;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "geraetItem")
public class GeraetItem extends DataSetItem {

	private String bezeichner = "";

	private String inventarnummer = "";

	private String geraeteType = "";

	private String hersteller = "";

	private String lieferant = "";

	private String ablageOrt = "";

	private String menge = "";

	private String groesse = "";

	private String ausgegebenAn = "";

	private long beschafftAm = 0;

	private long hergestelltAm = 0;

	private long ausgemustertAm = 0;

	private long ausgegebenAm = 0;

	private double preis = 0;

	private List<InlinePruefung> noetigePruefungen = new ArrayList<>();

	private List<Geprueft> durchgefuehrtePruefungen = new ArrayList<>();

	public GeraetItem() {

	}

	@Override
	public String toString() {

		return bezeichner;
	}

	@Override
	public String getFullTextFilterString() {

		StringBuilder b = new StringBuilder();
		b.append(bezeichner);
		b.append(" ");
		b.append(inventarnummer);
		b.append(" ");
		b.append(geraeteType);
		b.append(" ");
		b.append(hersteller);
		b.append(" ");
		b.append(ablageOrt);
		b.append(" ");
		b.append(menge);
		b.append(" ");
		b.append(groesse);
		b.append(" ");
		b.append(ausgegebenAn);
		b.append(" ");
		b.append(geraeteType);
		b.append(" ");
		b.append(getStatus());
		b.append(" ");
		b.append(getKommentar());
		return b.toString();
	}

	@Override
	public PruefungAnzeigen getNaestePruefungen() {

		InlinePruefung naechstePruefung = null;
		Geprueft geprueft = null;
		Geprueft naechstePruefungGeprueft = null;
		long minTageBisZurPruefung = Integer.MAX_VALUE;
		Collections.sort(durchgefuehrtePruefungen);
		boolean schonGeprueft = false;
		for (InlinePruefung p : noetigePruefungen) {
			for (Geprueft g : durchgefuehrtePruefungen) {
				if (g.getIndentifer().equals(p.getIdentifier())) {
					geprueft = g;
					schonGeprueft = true;
					break;
				}
			}
			if (geprueft == null) {
				geprueft = new Geprueft();
				geprueft.setGesprueftAM(new Date(0));
			}
			long tageBisZurPruefung = p.getTageBisLong(geprueft.getGesprueftAM());
			if (minTageBisZurPruefung > tageBisZurPruefung) {
				minTageBisZurPruefung = tageBisZurPruefung;
				naechstePruefung = p;
				naechstePruefungGeprueft = geprueft;
			}
		}
		if (naechstePruefung != null) {
			if (schonGeprueft) {
				return new PruefungAnzeigen(naechstePruefung, minTageBisZurPruefung,
						naechstePruefung.getDateumNaechstePruefung(naechstePruefungGeprueft.getGesprueftAM()));
			} else {
				return new PruefungAnzeigen(naechstePruefung, minTageBisZurPruefung, null);
			}
		}
		return new PruefungAnzeigen();
	}

	public GeraetItem(String bezeichner) {

		this.bezeichner = bezeichner;
	}

	@Override
	public String getType() {

		return "Geraet";
	}

	@Override
	public String printType() {

		return "Gerät";
	}

	@Override
	public String getBezeichner() {

		return bezeichner;
	}

	public String getInventarnummer() {

		return inventarnummer;
	}

	public void setInventarnummer(String inventarnummer) {

		this.inventarnummer = inventarnummer;
	}

	public String getHersteller() {

		return hersteller;
	}

	public void setHersteller(String hersteller) {

		this.hersteller = hersteller;
	}

	public String getLieferant() {

		return lieferant;
	}

	public void setLieferant(String lieferant) {

		this.lieferant = lieferant;
	}

	public String getAblageOrt() {

		return ablageOrt;
	}

	public void setAblageOrt(String ablageOrt) {

		this.ablageOrt = ablageOrt;
	}

	public String getMenge() {

		return menge;
	}

	public void setMenge(String menge) {

		this.menge = menge;
	}

	public String getGroesse() {

		return groesse;
	}

	public void setGroesse(String groesse) {

		this.groesse = groesse;
	}

	public String getAusgegebenAn() {

		return ausgegebenAn;
	}

	public void setAusgegebenAn(String ausgegebenAn) {

		this.ausgegebenAn = ausgegebenAn;
	}

	public long getBeschafftAm() {

		return beschafftAm;
	}

	public void setBeschafftAm(long beschafftAm) {

		this.beschafftAm = beschafftAm;
	}

	public long getHergestelltAm() {

		return hergestelltAm;
	}

	public void setHergestelltAm(long hergestelltAm) {

		this.hergestelltAm = hergestelltAm;
	}

	public long getAusgemustertAm() {

		return ausgemustertAm;
	}

	public void setAusgemustertAm(long ausgemustertAm) {

		this.ausgemustertAm = ausgemustertAm;
	}

	/**
	 * @return the noetigePruefungen
	 */
	public List<InlinePruefung> getNoetigePruefungen() {

		return noetigePruefungen;
	}

	/**
	 * @param noetigePruefungen
	 *            the noetigePruefungen to set
	 */
	public void setNoetigePruefungen(List<InlinePruefung> noetigePruefungen) {

		this.noetigePruefungen = noetigePruefungen;
	}

	/**
	 * @return the durchgefuehrtePruefungen
	 */
	public List<Geprueft> getDurchgefuehrtePruefungen() {

		return durchgefuehrtePruefungen;
	}

	/**
	 * @param durchgefuehrtePruefungen
	 *            the durchgefuehrtePruefungen to set
	 */
	public void setDurchgefuehrtePruefungen(List<Geprueft> durchgefuehrtePruefungen) {

		this.durchgefuehrtePruefungen = durchgefuehrtePruefungen;
	}

	public long getAusgegebenAm() {

		return ausgegebenAm;
	}

	public void setAusgegebenAm(long ausgegebenAm) {

		this.ausgegebenAm = ausgegebenAm;
	}

	public double getPreis() {

		return preis;
	}

	public void setPreis(double preis) {

		this.preis = preis;
	}

	@Override
	public void setBezeichner(String bezeichner) {

		this.bezeichner = bezeichner;
	}

	public String getGeraeteType() {

		return geraeteType;
	}

	public void setGeraeteType(String geraeteType) {

		this.geraeteType = geraeteType;
	}
}
